﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using GestionEducativa.DataLayer;

namespace GestionEducativa.Models
{
    public class ReporteViewModel
    {
        public static IEnumerable<DetalleFacturaViewModel> DetalleFacturaRep(int idf)
        {
            IEnumerable<DetalleFactura> df = new DetalleFacturaRepository().TraerDetallesFactura(idf);

            ConceptoDetalle cd;
            List<DetalleFacturaViewModel> iedf = new List<DetalleFacturaViewModel>();
            DetalleFacturaViewModel dfv = new DetalleFacturaViewModel();

            foreach (DetalleFactura item in df)
            {
                cd = new ConceptoDetalleRepository().TraerConceptoDetalle(item.idconcepto);
                dfv = new DetalleFacturaViewModel();

                dfv.Id = item.idconcepto;
                dfv.IdFactura = item.idfactura;
                dfv.IdConcepto = item.iddetalle;
                dfv.Concepto = cd.concepto;
                dfv.Monto = (decimal)cd.monto;

                iedf.Add(dfv);                
            }
            return
                iedf.AsEnumerable();
        }

        public static IEnumerable<Facturas> TraerTodasFacturas()
        {
            return
                new FacturaRepository().TraerFacturasTodas();
        }
        public static IEnumerable<Facturas> TraerFacturasRangoFechas(DateTime fechainical, DateTime fechafinal)
        {
            return
                new FacturaRepository().TraerFacturaRangoFechas(fechainical, fechafinal);
        }
        public static IEnumerable<Facturas> TraerFacturasAlumno(string matricula)
        {
            return
                new FacturaRepository().TraerFacturasAlumno(matricula);
        }
        public static IEnumerable<Facturas> TraerUnicaFactura(int id)
        {
            return 
                new FacturaRepository().TraerUnicaFactura(id);
        }
        public static IEnumerable<Facturas> TraerFacturasAlumnoRangoFecha(string matricula, DateTime fechainicial,
          DateTime fechafinal)
        {
            return
                new FacturaRepository().FacturasAlumnoFecha(matricula, fechainicial, fechafinal);
        }

        public static IEnumerable<string> TiposReportesFactura()
        {
            List<string> tiposdereportefactura = new List<string>();
            tiposdereportefactura.Add("Todas las facturas");
            tiposdereportefactura.Add("Factura unica");
            tiposdereportefactura.Add("Rango de fecha");
            tiposdereportefactura.Add("Por alumno");
            tiposdereportefactura.Add("Por alumno con rango de fecha");

            return
                tiposdereportefactura.AsEnumerable();
        }
        public static IEnumerable<string> TiposReportesRecivo()
        {
            List<string> tiposdereporterecivo = new List<string>();
            tiposdereporterecivo.Add("Todos los Recibos");
            tiposdereporterecivo.Add("Recibo unico");
            tiposdereporterecivo.Add("Rango de fecha");
            tiposdereporterecivo.Add("Por alumno");
            tiposdereporterecivo.Add("Por alumno con rango de fecha");
            tiposdereporterecivo.Add("Recibos por factura");
            tiposdereporterecivo.Add("Recibos por factura con rango de fecha");

            return
                tiposdereporterecivo.AsEnumerable();
        }

        public static IEnumerable<Recibos> TraerTodosRecibos()
        {    
            return
                new RecibosRepository().TraerTodosRecibos();
        }
        public static IEnumerable<Recibos> TraerReciboUnico(int idr)
        {
            return
                new RecibosRepository().TraerRecibos(idr);
        }
        public static IEnumerable<Recibos> TraerRecibosPorFactura(int idf)
        {
            return
                new RecibosRepository().TraerRecibosPorFactura(idf);
        }
        public static IEnumerable<Recibos> TraerRecibosRangoFecha(DateTime fechainical, DateTime fechafinal)
        {
            return
                new RecibosRepository().TraerRecibosePorFecha(fechainical, fechafinal);
        }
        public static IEnumerable<Recibos> TraerRecibosFactruasRangoFecha(int idfactura, DateTime fechainical, DateTime fechafinal)
        {
            return
                new RecibosRepository().TraerReciboseFacturaPorFecha(idfactura, fechainical, fechafinal);
        }
        public static IEnumerable<Recibos> TraerRecibosAlumnoRangoFecha(string matricula, DateTime fechainical, DateTime fechafinal)
        {
            return
                new RecibosRepository().TraerRecibosEstudiantesFechas(matricula, fechainical, fechafinal);
        }
        public static IEnumerable<Recibos> TraerRecibosPorAlumno(string matricula)
        {
            return
                new RecibosRepository().TraerRecibosEstudiantes(matricula);
        }

        public static IEnumerable<RecibosViewModel> AdactarViewRecibos(IEnumerable<Recibos> recibos)
        {
            List<RecibosViewModel> listaRecivos = new List<RecibosViewModel>();
            RecibosViewModel recibo;
            Facturas factura;
            Alumnos alumno;

            foreach (Recibos item in recibos)
            {
                factura = new FacturaRepository().TraerUnicaFacturaObt(item.idfactura);
                alumno = new AlumnoRepository().TraerAlumno(factura.matricula);
                recibo = new RecibosViewModel();

                recibo.Id = item.idrecibo;
                recibo.Fecha = (DateTime)item.fecha;
                recibo.Monto = (decimal)item.monto;
                recibo.IdFactura = item.idfactura;
                recibo.Nombre = alumno.nombre + " " + alumno.apellidos;
                recibo.Matricula = factura.matricula;

                listaRecivos.Add(recibo);
            }
            return
                listaRecivos.AsEnumerable();
        }
        public static IEnumerable<FacturasViewModel> AdactarViewFacturas(IEnumerable<Facturas> facturas)
        {
            List<FacturasViewModel> listafacturas = new List<FacturasViewModel>();
            FacturasViewModel factura;

            foreach (Facturas item in facturas)
            {
                factura = new FacturasViewModel();

                factura.Id = item.idfactura;
                factura.Fecha = (DateTime)item.fecha;
                factura.Monto = (decimal)item.monto;
                factura.Matricula = item.matricula;
                factura.Estado = (bool)item.estado;
                factura.Validez = (bool)item.validez;

                listafacturas.Add(factura);
            }

            return
                listafacturas.AsEnumerable(); 
        }
    }
}